
package Ventanas;

import Offline.Usuario;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

/**
 * @author Alvaro Garcia Tapia
 * @author Pablo Mosquera Diaz
 * @author Victor Navarro Ortego
 * @author Adrian Neila Serrano
 * @author Daniel Sanchez Suarez
 * 
 * @proyecto Gestor de Tareas Online
 * @version 1.61
 */
public class VentanaExportar extends JFrameConFondo implements ActionListener{

    Usuario usuario;
    
    public VentanaExportar(Usuario user, int max) {
        
        super("Exportar");

        
        this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        //se añade la opción de preguntar antes de salir
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                cancel();
            }
        });
        
        
        this.usuario = user;
        
        JPanel panel = new JPanel();
        setIconImage(new ImageIcon(getClass().getResource("objetos/icono.png")).getImage()); 
        JFileChooser chooser = new JFileChooser();
        JButton cancelar = new JButton("Cancelar");
        //Creación de la ventana de selección de archivo
        String dialogTitle = "Exportar";
        chooser.setDialogTitle(dialogTitle);
        chooser.setMultiSelectionEnabled(false);
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        chooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
        FileWriter fichero = null;
        PrintWriter pw = null;
        //Se espera hasta que se pulsa guardar
        int sel = chooser.showSaveDialog(chooser);
        if (sel == JFileChooser.APPROVE_OPTION){
            try {
                File selectedFile = chooser.getSelectedFile();
                fichero = new FileWriter(selectedFile.getAbsolutePath());
                //Se activa la barra de progreso
                JProgressBar barra = new JProgressBar(0,max);
                barra.setValue(0);
                barra.setBounds(10, 10, 80, 40);
                barra.setStringPainted(true);
                panel.add(barra);
                
                cancelar.setBounds(50, 100, 100, 20);
                cancelar.addActionListener(this);
                panel.add(cancelar);
                
                setContentPane(panel);
                setSize(200, 100);
                setLocationRelativeTo(null);
                setVisible(true);
                
                exportar export = new exportar(usuario,fichero,barra,this);
                export.start();
            } catch (IOException ex) {
                Logger.getLogger(VentanaExportar.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else{
            return;
        }
    }

    /**
     * Metodo para cancelar la exportación 
     */
    private void cancel(){
        String message = "¿Está seguro de que quiere cancelar la exportacion de las listas?";
        String title = "Eliminar";
        //Se pide confirmacion para eliminar la tarea
        int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
        if (reply == JOptionPane.YES_OPTION){
            usuario.Cancelar();   
            setVisible(false);
            System.out.println(DISPOSE_ON_CLOSE);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
        }
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
         cancel();
    }
}

//Clase para exportar
class exportar extends Thread{
    
   Usuario usuario;
   FileWriter fichero;
   JProgressBar barra;
   JFrame frame;
    
   public exportar(Usuario usuario,FileWriter fichero,JProgressBar barra, JFrame frame){
      this.usuario = usuario;
      this.fichero = fichero;
      this.barra = barra;
      this.frame = frame;
   }
   
   //Metodo que imprime los datos del usuario
   public void run(){
       usuario.Imprimir(fichero,barra,frame);
   }
};
